3.2 Pandas对象简介

本文源码请见我的GitHub 

1
2
import numpy as np
import pandas as pd

3.2.1 Series对象

1
2
#series对象是一个带索引数据构成的一维数组。 可以用一个数组创建Series对象
data = pd.Series([1,2,3,5,7])
1
data
0    1
1    2
2    3
3    5
4    7
dtype: int64
1
2
3
4
#可以通过values的index获取
print(data.index)
print(data.values)
print(data[1])
RangeIndex(start=0, stop=5, step=1)
[1 2 3 5 7]
2
1
data[1:3]
1    2
2    3
dtype: int64

1. Series 是通用的 Numpy 数组

Pandas 的 Series 对象 使用一种显示定义的索引与数值关联

1
data = pd.Series([0.25,3,0.45,0.75], index = ['a', 'b', 'c', 'd'])
1
data['b']
3.0

也可以使用不连续或者不按顺序的索引

1
2
3
data = pd.Series([0.25,0.3, 0.5, 1.0],
index = [2,5,7,9])
data[5]
0.3

2.Series是特殊的字典

1
2
3
4
5
6
7
population_dict = {'California' : 1548,
'Texas': 1131,
'New York': 1922,
'Florida': 1955,
'Illinois':1288}
population = pd.Series(population_dict)
population
California    1548
Texas         1131
New York      1922
Florida       1955
Illinois      1288
dtype: int64

字典创建Series对象时,索引默认按照顺序排列。但是典型的取值方式任然使用

1
population['California']
1548

Series还支持数组形式的操作

1
population['California':'Illinois']
California    1548
Texas         1131
New York      1922
Florida       1955
Illinois      1288
dtype: int64

3.创建Series对象

1.列表orNumpy数组

2.标量

3.字典

1
pd.Series([2,3,4])
0    2
1    3
2    4
dtype: int64
1
pd.Series(5, index=[100,200,300]) #创建时惠重复填充到每个索引中
100    5
200    5
300    5
dtype: int64
1
pd.Series({2:'s',1:"a",3:'b'})
2    s
1    a
3    b
dtype: object
1
2
a = pd.Series({2:'s',1:"a",3:'b'}, index=[3,2]) #会保留显式定义的键值对
a
3    b
2    s
dtype: object

3.2.2 Pandas的DataFrame对象

DataFrame可以看成一种灵活的行索引、又有列名的二维数组。

1
2
3
4
5
6
7
area_dict = {'California' : 61548,
'Texas': 51131,
'New York': 19422,
'Florida': 31955,
'Illinois':21288}
area = pd.Series(area_dict)#将字典传入
area
California    61548
Texas         51131
New York      19422
Florida       31955
Illinois      21288
dtype: int64
1
state = pd.DataFrame({'population' : population, 'area' : area })
1
state
population area
California 1548 61548
Texas 1131 51131
New York 1922 19422
Florida 1955 31955
Illinois 1288 21288

左边的索引为index 上面的columns

1
state.index
Index(['California', 'Texas', 'New York', 'Florida', 'Illinois'], dtype='object')
1
state.columns
Index(['population', 'area'], dtype='object')

2.DataFrame是特殊的字典

1
2
print(state['area'])
'''映射到一个Series'''
California    61548
Texas         51131
New York      19422
Florida       31955
Illinois      21288
Name: area, dtype: int64





'映射到一个Series'

data[0]返回第一行 data[‘列名’]返回某一列·

3.创建DataFrame

1
2
'''单个Series'''
pd.DataFrame(population,columns=['population']) #这里的列名可加可不加 不加的话就是0
population
California 1548
Texas 1131
New York 1922
Florida 1955
Illinois 1288
1
2
3
#t通过字典列表
data = [{'a':q, 'b' : 2 * q} for q in range(3)]
pd.DataFrame(data)
a b
0 0 0
1 1 2
2 2 4
1
2
#3.Series对象字典
pd.DataFrame({'population' : population, "area": area})
population area
California 1548 61548
Texas 1131 51131
New York 1922 19422
Florida 1955 31955
Illinois 1288 21288
1
2
#4.Numpy 二维数组
pd.DataFrame(np.random.rand(3,2), columns=['fll', 'bar'] , index = ['a', 'b', 'c'])
fll bar
a 0.672980 0.830471
b 0.446971 0.244948
c 0.352801 0.680514
1
#5.numpy结构化数组

3.2.3 Pandas的Index对象 (不可变!!

1
2
ind =  pd.Index([2,3,5,7,9])
ind
Int64Index([2, 3, 5, 7, 9], dtype='int64')
1
print('index 是可以自己创建的!但是不可变!!')
index 是可以自己创建的!但是不可变!!
1
2
3
4
#2.INdex是有序集合
indA= pd.Index([1,3,5,7])
indB = pd.Index([2,3,5,9])
indA&indB
Int64Index([3, 5], dtype='int64')
1
indA | indB #并集
Int64Index([1, 2, 3, 5, 7, 9], dtype='int64')
1
indA ^ indB #已获
Int64Index([1, 2, 7, 9], dtype='int64')